package com.antu.first.dao;

import com.antu.first.bean.DiscountCoupon;
import com.antu.first.bean.Hotel;
import com.antu.first.bean.Merchant;
import com.antu.first.bean.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;


public interface DiscountCouponDao {

    /**
     * 根据用户Id获取该用户下所有可用的优惠券数量
     * @param uId
     * @param canUse
     * @return
     */
    int countAllsByUid(@Param("uId") int uId,@Param("canUse") int canUse);
    /**
     * 根据用户Id获取用户的所有可用优惠券
     * @return
     */
    List<DiscountCoupon> queryAllsByUid(@Param("uId") int uId,@Param("canUse")int canUse, @Param("rowIndex") int rowIndex);
    /**
     * 商家添加优惠券
     * @param discountCoupon 优惠券对象
     * @return 影响行数
     */
    public int addDiscountCoupon(DiscountCoupon discountCoupon);

    /**
     * 根据优惠券面值查询优惠券
     * @param discountCoupon 优惠券对象
     * @return 优惠券集合
     */
    public List<DiscountCoupon> selectDiscountCouponByValue(DiscountCoupon discountCoupon);

    /**
     * 根据时间区间查询优惠券
     * @param discountCoupon 优惠券对象
     * @return 优惠券集合
     */
    public List<DiscountCoupon> selectDiscountCouponByDate(DiscountCoupon discountCoupon);

    /**
     * 根据当前时间查还未使用的优惠券
     * @param discountCoupon 优惠券对象
     * @return 集合对象
     */
    public List<DiscountCoupon> selectDiscountCouponUnuse(DiscountCoupon discountCoupon);
    /**
     * 根据当前时间查正在使用的优惠券
     * @param discountCoupon 优惠券对象
     * @return 集合对象
     */
    public List<DiscountCoupon> selectDiscountCouponUsing(DiscountCoupon discountCoupon);
    /**
     * 根据当前时间查已经使用的优惠券
     * @param discountCoupon 优惠券对象
     * @return 集合对象
     */
    public List<DiscountCoupon> selectDiscountCouponUsed(DiscountCoupon discountCoupon);

    /**
     * 修改未使用的优惠券状态码
     * @param dId 优惠券ID
     * @return 影响行数
     */
    public int updateDiscountCouponUnuseState1(int dId);
    /**
     * 修改使用使用中的优惠券状态码
     * @param dId 优惠券ID
     * @return 影响行数
     */
    public int updateDiscountCouponUsingState2(int dId);
    /**
     * 修改使用已经使用的优惠券状态码
     * @param dId 优惠券ID
     * @return 影响行数
     */
    public int updateDiscountCouponUsedState3(int dId);

    /**
     * 根据酒店ID和优惠券未使用状态查看优惠券
     * @param discountCoupon 优惠券对象
     * @return 优惠券集合
     */
    public List<DiscountCoupon> selectDiscountCouponUnuseByState(DiscountCoupon discountCoupon);
    /**
     * 根据酒店ID和优惠券使用中状态查看优惠券
     * @param discountCoupon 优惠券对象
     * @return 优惠券集合
     */
    public List<DiscountCoupon> selectDiscountCouponUsingByState(DiscountCoupon discountCoupon);
    /**
     * 根据酒店ID和优惠券已经使用的状态查看优惠券
     * @param discountCoupon 优惠券对象
     * @return 优惠券集合
     */
    public List<DiscountCoupon> selectDiscountCouponUsedByState(DiscountCoupon discountCoupon);

    /**
     * 根据ID修改优惠券信息
     * @param discountCoupon 优惠券对象
     * @return 影响行数
     */
    public int updateDiscountCouponInfor(DiscountCoupon discountCoupon);

    /**
     * 根据ID删除优惠券
     * @param discountCoupon 优惠券对象
     * @return 影响行数
     */
    public int deleteDiscountCouponById(DiscountCoupon discountCoupon);

    /**
     * 根据商家ID查询所有优惠券,有分页
     * @param hotel 酒店对象
     * @param pageIndex 查询起始页
     * @param pageSize 分页条数
     * @return 优惠券集合
     */
    public List<DiscountCoupon> selectAllDiscountCoupon(@Param("hotel") Hotel hotel,@Param("pageIndex") int pageIndex,@Param("pageSize") int pageSize);

    /**
     * 根据商家ID查询所有优惠券,没有分页
     * @param hotel 酒店对象
     * @return 优惠券集合
     */
    public  List<DiscountCoupon> selectAllDiscountCouponNoLimit(@Param("hotel") Hotel hotel);
    /**
     * 用户查询与自己相关的优惠券(龙程)
     * @param user
     * @return
     */
    List<DiscountCoupon> usersGetAlTheCoupons(@Param("user") User user,@Param("status")Integer status);

    /**
     * 按照按照优惠券ID和状态值
     * @param couponsId
     * @param status
     * @return
     */
    int updateCouponsByIdAndStatus(@Param("couponsId")int couponsId,@Param("status")int status);

    /**
     * 按照酒店ID和优惠券状态查询优惠券
     * @param discountCoupon
     * @return
     */
    List<DiscountCoupon> selectByHotelIdAndCouponId(DiscountCoupon discountCoupon);

    /**
     * 检查优惠券数量
     * @param discountCoupon
     * @return
     */
    int checkNumebr(DiscountCoupon discountCoupon);

    /**
     * 用户抢券操作
     * @param discountCoupon
     * @return
     */
    int userRobStamps(DiscountCoupon discountCoupon);

    /**
     * 更改商家同一发行时间的优惠券的数量（同步数量）
     * @param discountCoupon
     */
    int numberOfSynchronous(DiscountCoupon discountCoupon);

    /**
     * 根据优惠券ID查询优惠券
     * @param id 优惠券ID
     * @return 对象
     */
    public DiscountCoupon queryCouponById(int id);
}
